package com.zhaokuner.pm.common.utils;

import com.zhaokuner.pm.model.enumeration.SuperEnum;

import java.util.HashMap;
import java.util.Map;

/**
 * 类描述:枚举工具类
 *
 * @author 赵希坤 zhaoxikun
 * @date 2020/8/23 17:46
 */
public class MyEnumUtils {

    private static Map<Class<?>, HashMap<Integer, SuperEnum>> cache = new HashMap<>();

    /**
     * 方法描述： 根据枚举获取 code 排空
     *
     * @param superEnum 枚举
     * @return java.lang.Integer
     * @author 赵希坤
     * @date 日期 2020/8/23 时间 17:47
     */
    public static Integer getCode(SuperEnum superEnum) {
        return null == superEnum ? null : superEnum.getCode();
    }

    /**
     * 方法描述： 根据code 获取class
     *
     * @param clazz 枚举类
     * @param code  code码
     * @return T
     * @author 赵希坤
     * @date 日期 2020/8/23 时间 17:47
     */
    public static <T extends SuperEnum> T getEnum(Class<T> clazz, Integer code) {
        if (null == clazz || null == code) {
            return null;
        }
        HashMap<Integer, SuperEnum> enumHashMap = cache.get(clazz);
        if (null != enumHashMap) {
            return (T) enumHashMap.get(code);
        }
        enumHashMap = new HashMap<>(8);
        cache.put(clazz, enumHashMap);
        T[] ts = clazz.getEnumConstants();
        for (T t : ts) {
            enumHashMap.put(t.getCode(), t);
        }
        return (T) enumHashMap.get(code);
    }
}
